require.config({
    baseUrl:"./",
    paths:{
        jq: "./libs/jquery",
        gg: "./modules/getGoods1",
        cr: "./modules/cartRender",
        rl: "./modules/resetLocal"
    }
});
require(["jq","gg","cr","rl"],function(_, getGoods1, render, resetLocal){

    const url = "http://localhost:3000/api";
    const tbody = $("tbody");
    
    // 1. 获取本地数据
    let goods = localStorage.getItem("goods") ? JSON.parse(localStorage.getItem("goods")) : [];

    // 2. 获取服务器数据
    getGoods1(url,res=>{
        res = JSON.parse(res).msg;
        // 3. 渲染
        render(goods, res, tbody);

        // 6. 页面渲染完成之后，计算总数量
        $("#allNum").html(allNum(goods));
        // 7. 页面渲染完成之后，计算总价
        $("#allPrice").html(allPrice(goods));
    })

    // 4. 绑定各种事件，开始各种购物车操作
    tbody.on("click", ".del", function(){
        const id = $(this).parent().attr("index");
        $(this).parent().remove();
        // console.log(id)
        // 5-1. 删除操作同步到本地数据
        resetLocal(goods, id, function(i){
            goods.splice(i, 1)
        })

        // 删除之后，计算总数量
        $("#allNum").html(allNum(goods));
        // 删除之后，计算总价
        $("#allPrice").html(allPrice(goods));
    })
    
    tbody.on("input", ".setNum", function(){
        const id = $(this).parent().parent().attr("index");
        const num = $(this).val()-0;
        // console.log(id, num)
        // 5-2. 修改操作同步到本地数据
        resetLocal(goods, id, function(i){
            goods[i].num = num
        })

        // 修改之后，计算总数量
        $("#allNum").html(allNum(goods));
        // 修改之后，计算总价
        $("#allPrice").html(allPrice(goods));
        //重新渲染
        
    })
})

// 作业：将计算总数量和计算总价封装成独立的模块，引入执行

// 计算总数量
function allNum(goods){
    // var sum = 0;
    // for(var i=0;i<goods.length;i++){
    //     sum += goods[i].num;
    // }
    // return sum;
    
    return goods.reduce((prev, val)=>{
        return prev + val.num
    }, 0)
}

// 计算小计
function allPrice(goods){
    return goods.reduce((prev, val)=>{
        return prev + val.num * val.price;
    }, 0)
}